package br.com.rookgraph;

import junit.framework.Assert;

public class GraphTestProcedure {

	/**
	 * Testa se o grafp passado possue as arestas passadas.
	 * @param graph
	 * @param edges
	 */
	public void shouldHasEdges(Graph graph, Edge ... edges){
		for (Edge edge : edges) {
			Assert.assertTrue("Deveria ter esta aresta!"+edge, graph.hasEdge(edge));
			Assert.assertTrue("Deveria ter esta aresta!"+edge, graph.hasEdge(edge.target, edge.origin));
		}
	}

	/**
	 * Testa se o grafo passo nao possue as arestas passadas.
	 * @param graph
	 * @param edges
	 */
	public void shouldNotHasEdges(Graph graph, Edge ... edges){
		for (Edge edge : edges) {
			Assert.assertFalse("Não deveria ter esta aresta!"+edge, graph.hasEdge(edge));
			Assert.assertFalse("Não deveria ter esta aresta!"+edge, graph.hasEdge(edge.target, edge.origin));
		}
	}

	/**
	 * Verifica se os graus dos vertices do graph passado,
	 * corresponde aos passados no array, na mesma ordem.
	 * @param graph
	 * @param graus
	 */
	public void shouldHasGraus(Graph graph, int[] graus) {
		for (int i = 1; i <= graus.length; i++) {
			Assert.assertEquals("O grau do vertice "+i+" não está correto",graus[i-1],graph.grau(i));
		}
	}

	/**
	 * Verifica se a origin e target são dados como validas no graph.
	 * @param origin
	 * @param target
	 * @param graph
	 */
	public void shouldBeValid(int origin, int target, Graph graph) {
		try{
			Assert.assertTrue("Deveria ser valido!", graph.isValid(origin, target));
		}catch(IllegalArgumentException e){
			Assert.fail("Deveria ser válido!");
		}
	}

	/**
	 * Verifica se a origin e target são dados como invalidas no graph.
	 * @param origin
	 * @param target
	 * @param graph
	 */
	public void shouldBeNotValid(int origin, int target, Graph graph) {
		try{
			graph.isValid(origin, target);
			Assert.fail("Deveria ser inválido!");
		}catch(IllegalArgumentException e){
			String msgExpected = "Origin ("+origin+") or Target("+target+") invalid!( < 0 or > ordem )";
			Assert.assertEquals("Mensagem incosistente!",msgExpected , e.getMessage());
		}
	}

	

	
};
